package com.ray.auth.system.service;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.ray.auth.system.emun.BtnType;
import com.ray.auth.system.emun.LinkType;
import com.ray.auth.system.table.entity.Button;
import com.ray.auth.system.table.entity.ButtonRel;
import com.zjhc.flyhong.common.function.operator.LoginUser;
import com.zjhc.flyhong.common.function.operator.PageDto;
import com.zjhc.flyhong.common.web.Result;

/**
 * <h1>资源服务  服务接口</h1>
 * @创建人 ray
 * @创建时间 2017-06-10
 * @版本 1.0
 * @重要修改备注 
 * 
 */
@Service
public interface ButtonService {
	/**
	 * 获取用户资源下授权的 资源  包括用户、用户组、角色
	 * @param userId 用户ID
	 * @return 资源
	 */
	List<Button> queryUserButtons(String userId,String appid);
	/**
	 * 获取超级用户资源下授权的 资源  包括用户、用户组、角色
	 * @param userId 用户ID
	 * @return 资源
	 */
	List<Button> querySuperUserButtons(String appid);
	/**
	 * 通过关联ID和关联类型 获取对应的菜单资源
	 * @param linkId 关联ID
	 * @param linkType 关联类型
	 * @return 菜单资源
	 */ 
	List<Button> queryButtonsByLinkType(String linkId, String appid,LinkType linkType);
	/**
	 * 获取超级用户资源下授权的 资源  包括用户、用户组、角色
	 * @param userId 用户
	 * @param menuId 菜单
	 * @return
	 */
	Map<String, List<Button>> queryUserButtonsWithMenu(LoginUser loginUser, String menuId);
	/**
	 * 查询所有从按钮
	 * @param params 查询参数
	 * @param page 分页信息
	 * @param loginUser 登录用户
	 * @return
	 */
	PageDto<Button> queryButtonList(Button params, PageDto<Button> page, LoginUser loginUser);
	 /**
     * 逻辑删除 按钮数据
     * @param id
     * @param loginUser
     * @return
     */
	public Result<Object> deleteButton(String id, LoginUser loginUser);
	/**
	 * 新增按钮
	 * @param record
	 * @param user
	 * @return
	 */
	Result<Object> saveButton(Button record, LoginUser user);
	/**
	 * 通过菜单查询
	 * @param menuId
	 * @return
	 */
	List<Button> queryButtonsByMenuId(String menuId,BtnType btnType);
	/**
	 * 通过菜单查询 包括禁用的
	 * @param menuId
	 * @return
	 */
	List<Button> queryAllButtonsByMenuId(String menuId);
	/**
	 * 查询按钮
	 * @param id
	 * @param user
	 * @return
	 */
	Button queryButton(String id, LoginUser user);
	/**
	 * 更新按钮
	 * @param record
	 * @param user
	 * @return
	 */
	Result<Object> updateButton(Button record, LoginUser user);
	/**
	 * 用户拥有的按钮资源
	 * @param userId
	 * @param user
	 * @return
	 */
	List<Button> queryUserOnwerButtons(String userId, LoginUser user);
	/**
	 * 获取角色拥有的按钮
	 * @param roleId
	 * @param user
	 * @return
	 */
	List<Button> queryRoleOnwerButtons(String roleId, LoginUser user);
	 /**
     * 新增按钮关联
     * @param menuId
     * @param linkId
     * @param type
     * @param loginUser
     * @return
     */
	public Result<Object> addButtonRel(String buttonId, String linkId, String linkType, LoginUser loginUser);
    /**
     * 判断按钮关联
     * @param menuId
     * @param roleId
     * @param type
     * @param loginUser
     * @return
     */
	public Result<Object> deleteButtonRel(String buttonId, String linkId, String linkType, LoginUser loginUser);
	/**
     * 查询按钮关联
     * @param menuId
     * @param roleId
     * @param type
     * @param loginUser
     * @return
     */
	public ButtonRel queryButtonRel(String buttonId, String linkId, String linkType, LoginUser loginUser);
	/**
	 * 删除 菜单关联按钮
	 * @param id
	 * @param loginUser
	 */
	public void deleteButtonByMenuId(String id, LoginUser loginUser);
	
}
